import Vue from 'vue'
import Router from 'vue-router'
import { routerMap, routes } from './router'
import store from '@/store'
import getToken from '@/lib/util.js'

Vue.use(Router)

const router = new Router({
  routes
})

//  通过服务端返回一个可访问的路由列表，再动态过滤挂在到路由实例
//  重置当前router的match属性

// router.js
// 定义一个函数来创建router
// export const createRouter = routes => new VueRouter({
//   mode: 'history',
//   base: process.env.BASE_URL,
//   routes
// });

// // 在使用addRoutes的地方
// // 重置当前router的match = 初始router.match
// router.match = createRouter(constantRoutes).match;
// router.addRoutes(routes);

// 遇到一些第三方依赖的问题，可以去搜索官方仓库的issue

router.beforeEach((to, from, next) => {
  if (true) {
    if (!store.state.router.hasGetRules) {
      store.dispatch('authorization').then(rules => {
        store.dispatch('concatRoutes', rules).then(routers => {
          router.addRoutes(routers)
          next({ ...to, replace: true })
        }).catch(() => {
          next({ name: 'login' })
        })
      }).catch(() => {
        setToken('')
        next({ name: 'login' })
      })
    } else {
      next()
    }
  } else {
    if (to.name === 'login') next()
    else next({ name: 'login' })
  }
})

export default router
